package com.nado.extensions.util;

import java.util.List;
import java.util.Map;

public interface ExtendedMap extends Map<Object, Object>, Cloneable {
	/**
	 * Adds the all.
	 * 
	 * @param map the map
	 */
	void addAll(Map<?, ?> map);

	/**
	 * Gets the.
	 * 
	 * @param key the key
	 * @param defaultValue the default value
	 * 
	 * @return the object
	 */
	Object get(Object key, Object defaultValue);

	/**
	 * Gets the string.
	 * 
	 * @param key the key
	 * 
	 * @return the string
	 */
	String getString(String key);

	/**
	 * Gets the string.
	 * 
	 * @param key the key
	 * @param defaultValue the default value
	 * 
	 * @return the string
	 */
	String getString(String key, String defaultValue);

	/**
	 * Gets the strings.
	 * 
	 * @param name the name
	 * 
	 * @return the strings
	 */
	String[] getStrings(String name);

	/**
	 * Gets the ints.
	 * 
	 * @param name the name
	 * 
	 * @return the ints
	 */
	int[] getInts(String name);

	/**
	 * Gets the boolean.
	 * 
	 * @param key the key
	 * 
	 * @return the boolean
	 */
	boolean getBoolean(String key);

	/**
	 * Gets the boolean.
	 * 
	 * @param key the key
	 * @param defaultValue the default value
	 * 
	 * @return the boolean
	 */
	boolean getBoolean(String key, boolean defaultValue);

	/**
	 * Gets the double.
	 * 
	 * @param key the key
	 * 
	 * @return the double
	 */
	double getDouble(String key);

	/**
	 * Gets the double.
	 * 
	 * @param key the key
	 * @param defaultValue the default value
	 * 
	 * @return the double
	 */
	double getDouble(String key, double defaultValue);

	/**
	 * Gets the float.
	 * 
	 * @param key the key
	 * 
	 * @return the float
	 */
	float getFloat(String key);

	/**
	 * Gets the float.
	 * 
	 * @param key the key
	 * @param defaultValue the default value
	 * 
	 * @return the float
	 */
	float getFloat(String key, float defaultValue);

	/**
	 * Gets the int.
	 * 
	 * @param key the key
	 * 
	 * @return the int
	 */
	int getInt(String key);

	/**
	 * Gets the int.
	 * 
	 * @param key the key
	 * @param defaultValue the default value
	 * 
	 * @return the int
	 */
	int getInt(String key, int defaultValue);

	/**
	 * Gets the long.
	 * 
	 * @param key the key
	 * 
	 * @return the long
	 */
	long getLong(String key);

	/**
	 * Gets the long.
	 * 
	 * @param key the key
	 * @param defaultValue the default value
	 * 
	 * @return the long
	 */
	long getLong(String key, long defaultValue);

	/**
	 * Gets the values.
	 * 
	 * @param key the key
	 * 
	 * @return the values
	 */
	List getValues(String key);
}
